﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2021_6_3
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 第一题：
            //一个考试管理系统，需要录入考生成绩，只能录入数字，否则会报类型转换异常。
            //1、捕获FormatException异常，并打印输出“异常已处理；
            //2、捕获OverflowException异常，数值超出flaot范围的异常，并打印输出“异常已处理；
            //3、捕获一般异常Exception异常。
            //请编写相关代码，
            List<float> score = new List<float>();
            try
            {
                while (true)
                {
                    Console.WriteLine("请输入您的成绩 （-1退出）");
                    float key = float.Parse(Console.ReadLine()) + 0.00f;
                    if (key == -1)
                    {
                        break;
                    }
                    else
                    {
                        score.Add(key);
                    }
                }
            }
            catch (ArrayTypeMismatchException)
            {
                Console.WriteLine("类型转换异常");
            }
            catch (FormatException)
            {
                Console.WriteLine("异常已处理");
            }
            catch (OverflowException)
            {
                Console.WriteLine("异常已处理");
            }
            catch (Exception)
            {
                Console.WriteLine("异常已处理");
            }
            //4、最终处理finally
            finally
            {
                Console.WriteLine("最终处理");
            }
            //录入成绩结束后，请输出，总学生数，总分数，平均分。
            if (score.Count < 1)
            {
                Console.WriteLine("没有任何的学生成绩");
            }
            else
            {
                Console.WriteLine("学生人数为："  + score.Count);
                Console.WriteLine("总分为：" + score.Sum());
                Console.WriteLine("平均分为：" + score.Average());
            }
            #endregion

            #region 第二题：
            //编写一个程序，用以接收用户输入的两个浮点型的数值，一个值表示用户想要存放在银行账户中的余额，另一个值表示用户想要从银行账户中提取的金额。
            //实现存取款功能，
            //用户功能选择：1、存款，2、取款
            //取款时：
            //当用户想要提取的金额大于余额时，请手动抛出一个ArgumentOutOfRangeException 参数超出范围的异常，异常信息可以写“取款金额大于余额，请重新输入”，如此以确保取款金额始终不大于当前余额。
            //操作结束，打印输出余额是多少。
            //最后再添加catch一般异常 Exception，使得数据类型转换的异常也能被捕获到。
            float save = 0;
            float get;
            int key1;
            Exception error = new ArgumentOutOfRangeException("取款金额大于余额，请重新输入"); ;
            try
            {
                while (true)
                {
                    Console.WriteLine("用户功能选择：1、存款，2、取款 任意键退出");
                    key1 = int.Parse(Console.ReadLine());

                    switch (key1)
                    {
                        case 1:
                            Console.WriteLine("请输入存款金额：");
                            save += float.Parse(Console.ReadLine()) + 0.00f;
                            break;
                        case 2:
                            Console.WriteLine("请输入取款金额：");
                            get = float.Parse(Console.ReadLine()) + 0.00f;
                            if (get > save)
                            {
                                Console.WriteLine(error.Message);//只会报错，如果用throw直接抛出的话，会直接被下面的catch替换，打印不出来
                            }
                            else 
                            {
                                save -= get;
                                Console.WriteLine("余额为:" + save);
                            }
                            break;
                        default:
                            System.Environment.Exit(0);
                            break;
                    }
                }
            }
            catch (Exception)
            {
                Console.WriteLine("异常已处理");
            }
                #endregion
        }
    }
}